From f0baaccd758bdc9c4c2d108ae0c2d64d380abc95 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Wed, 24 Oct 2007 17:15:54 +0100 Subject: [PATCH] x86: Remove CALLBACKTYPE_sysexit. Looking at the Linux patch as an example, it adds more code and complexity than it removes, for no obvious performance benefit. Signed-off-by: Keir Fraser --- xen/arch/x86/domain.c | 4 ---- xen/arch/x86/x86_64/asm-offsets.c | 2 -- xen/arch/x86/x86_64/compat/traps.c | 6 ------ xen/arch/x86/x86_64/entry.S | 6 ++---- xen/arch/x86/x86_64/traps.c | 6 ------ xen/include/asm-x86/domain.h | 2 -- xen/include/public/callback.h | 7 ------- 7 files changed, 2 insertions(+), 31 deletions(-) diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c index 352566636d..295ad77145 100644 --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -418,10 +418,6 @@ int vcpu_initialise(struct vcpu *v) v->arch.perdomain_ptes = d->arch.mm_perdomain_pt + (v->vcpu_id << GDT_LDT_VCPU_SHIFT); -#ifdef __x86_64__ - v->arch.sysexit_cs = 3; -#endif - return (is_pv_32on64_vcpu(v) ? setup_compat_l4(v) : 0); } diff --git a/xen/arch/x86/x86_64/asm-offsets.c b/xen/arch/x86/x86_64/asm-offsets.c index 7218cac115..bcb025688c 100644 --- a/xen/arch/x86/x86_64/asm-offsets.c +++ b/xen/arch/x86/x86_64/asm-offsets.c @@ -79,8 +79,6 @@ void __dummy__(void) OFFSET(VCPU_sysenter_sel, struct vcpu, arch.sysenter_callback_cs); OFFSET(VCPU_sysenter_disables_events, struct vcpu, arch.sysenter_disables_events); - OFFSET(VCPU_sysexit_addr, struct vcpu, arch.sysexit_eip); - OFFSET(VCPU_sysexit_sel, struct vcpu, arch.sysexit_cs); OFFSET(VCPU_gp_fault_addr, struct vcpu, arch.guest_context.trap_ctxt[TRAP_gp_fault].address); OFFSET(VCPU_gp_fault_sel, struct vcpu, diff --git a/xen/arch/x86/x86_64/compat/traps.c b/xen/arch/x86/x86_64/compat/traps.c index 286d8ad72c..fddbbd27d8 100644 --- a/xen/arch/x86/x86_64/compat/traps.c +++ b/xen/arch/x86/x86_64/compat/traps.c @@ -179,11 +179,6 @@ static long compat_register_guest_callback( (reg->flags & CALLBACKF_mask_events) != 0; break; - case CALLBACKTYPE_sysexit: - v->arch.sysexit_cs = reg->address.cs | 3; - v->arch.sysexit_eip = reg->address.eip; - break; - case CALLBACKTYPE_nmi: ret = register_guest_nmi_callback(reg->address.eip); break; @@ -207,7 +202,6 @@ static long compat_unregister_guest_callback( case CALLBACKTYPE_failsafe: case CALLBACKTYPE_syscall32: case CALLBACKTYPE_sysenter: - case CALLBACKTYPE_sysexit: ret = -EINVAL; break; diff --git a/xen/arch/x86/x86_64/entry.S b/xen/arch/x86/x86_64/entry.S index 39feb5fd9a..34c9c2a923 100644 --- a/xen/arch/x86/x86_64/entry.S +++ b/xen/arch/x86/x86_64/entry.S @@ -264,11 +264,9 @@ sysenter_eflags_saved: movl $TRAP_syscall,4(%rsp) SAVE_ALL GET_CURRENT(%rbx) - movq VCPU_sysexit_addr(%rbx),%rax - movzwl VCPU_sysexit_sel(%rbx),%edx cmpb $0,VCPU_sysenter_disables_events(%rbx) - movq %rax,UREGS_rip(%rsp) - movl %edx,UREGS_cs(%rsp) + movq $0,UREGS_rip(%rsp) /* null rip */ + movl $3,UREGS_cs(%rsp) /* ring 3 null cs */ movq VCPU_sysenter_addr(%rbx),%rax setne %cl leaq VCPU_trap_bounce(%rbx),%rdx diff --git a/xen/arch/x86/x86_64/traps.c b/xen/arch/x86/x86_64/traps.c index dd86fb75a7..4df88dbb3d 100644 --- a/xen/arch/x86/x86_64/traps.c +++ b/xen/arch/x86/x86_64/traps.c @@ -431,11 +431,6 @@ static long register_guest_callback(struct callback_register *reg) !!(reg->flags & CALLBACKF_mask_events); break; - case CALLBACKTYPE_sysexit: - v->arch.sysexit_eip = reg->address; - v->arch.sysexit_cs = FLAT_USER_CS32; - break; - case CALLBACKTYPE_nmi: ret = register_guest_nmi_callback(reg->address); break; @@ -459,7 +454,6 @@ static long unregister_guest_callback(struct callback_unregister *unreg) case CALLBACKTYPE_syscall: case CALLBACKTYPE_syscall32: case CALLBACKTYPE_sysenter: - case CALLBACKTYPE_sysexit: ret = -EINVAL; break; diff --git a/xen/include/asm-x86/domain.h b/xen/include/asm-x86/domain.h index c7267fbfd7..498c2fe591 100644 --- a/xen/include/asm-x86/domain.h +++ b/xen/include/asm-x86/domain.h @@ -303,10 +303,8 @@ struct arch_vcpu struct trap_bounce int80_bounce; unsigned long syscall32_callback_eip; unsigned long sysenter_callback_eip; - unsigned long sysexit_eip; unsigned short syscall32_callback_cs; unsigned short sysenter_callback_cs; - unsigned short sysexit_cs; bool_t syscall32_disables_events; bool_t sysenter_disables_events; #endif diff --git a/xen/include/public/callback.h b/xen/include/public/callback.h index 9423fc135d..f4962f66d8 100644 --- a/xen/include/public/callback.h +++ b/xen/include/public/callback.h @@ -64,13 +64,6 @@ */ #define CALLBACKTYPE_sysenter 5 -/* - * x86/64 hypervisor: used to fill a sysenter frame's return address, if the - * guest desires to have a non-NULL value there. If the guest kernel is - * 64-bit then the sysexit code selector is always set to FLAT_USER_CS32. - */ -#define CALLBACKTYPE_sysexit 6 - /* * x86/64 hypervisor: Syscall by 32-bit guest app on AMD CPUs * ('32-on-32-on-64', '32-on-64-on-64') -- 2.30.2